EC-CUBE 2.11.4
[ class tree: EC-CUBE 2.11.4 ] [ index: EC-CUBE 2.11.4 ] [ all elements ]

Source for file SC_MobileImage.php

Documentation is available at SC_MobileImage.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  *
  23.  * 端末の画面解像度にあわせて画像を変換する
  24.  */
  25.  
  26. define("MOBILE_IMAGE_INC_REALDIR", realpath(dirname( __FILE__)) . "/../include/");
  27. require_once MOBILE_IMAGE_INC_REALDIR . 'image_converter.inc';
  28.  
  29. /**
  30.  * 画像変換クラス
  31.  */
  32. class SC_MobileImage {
  33.     /**
  34.      * 画像を端末の解像度に合わせて変換する
  35.      * output buffering 用コールバック関数
  36.      *
  37.      * @param string 入力
  38.      * @return string 出力
  39.      */
  40.     function handler($buffer) {
  41.  
  42.         // 端末情報を取得する
  43.         $carrier = SC_MobileUserAgent_Ex::getCarrier();
  44.         $model   = SC_MobileUserAgent_Ex::getModel();
  45.  
  46.         // 携帯電話の場合のみ処理を行う
  47.         if ($carrier !== FALSE) {
  48.  
  49.             // HTML中のIMGタグを取得する
  50.             $pattern = '/<img\s+[^<>]*src=[\'"]?([^>"\'\s]+)[\'"]?[^>]*>/i';
  51.             $result = preg_match_all($pattern, $buffer, $images);
  52.  
  53.             // 端末の情報を取得する
  54.             $fp = fopen(MOBILE_IMAGE_INC_REALDIR . "mobile_image_map_$carrier.csv", 'r');
  55.             // 取得できない場合は, 入力内容をそのまま返す
  56.             if ($fp === false) {
  57.                 return $buffer;
  58.             }
  59.             while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
  60.                 if ($data[1] == $model || $data[1] == '*') {
  61.                     $cacheSize     = $data[2];
  62.                     $imageFileSize = $data[7];
  63.                     $imageType     = $data[6];
  64.                     $imageWidth    = $data[5];
  65.                     $imageHeight   = $data[4];
  66.                     break;
  67.                 }
  68.             }
  69.             fclose($fp);
  70.  
  71.             // docomoとsoftbankの場合は画像ファイル一つに利用可能なサイズの上限を計算する
  72.             // auはHTMLのbyte数上限に画像ファイルサイズが含まれないのでimageFileSizeのまま。
  73.             if ($carrier == 'docomo' or $carrier == 'softbank') {
  74.                 if( $result != false && $result > 0){
  75.                     // 計算式:(利用端末で表示可能なcacheサイズ - HTMLのバイト数 - 変換後の画像名のバイト数(目安値) ) / HTML中の画像数
  76.                     $temp_imagefilesize = ($cacheSize - strlen($buffer) - (140 * $result) ) / $result;
  77.                 } else {
  78.                     // 計算式:(利用端末で表示可能なcacheサイズ - HTMLのバイト数 )
  79.                     $temp_imagefilesize = ($cacheSize - strlen($buffer) );
  80.                 }
  81.                 // 計算結果が端末の表示可能ファイルサイズ上限より小さい場合は計算結果の値を有効にする
  82.                 if ($temp_imagefilesize < $imageFileSize) {
  83.                     $imageFileSize = $temp_imagefilesize;
  84.                 }
  85.             }
  86.  
  87.             // 画像変換の情報をセットする
  88.             $imageConverter = New ImageConverter();
  89.             $imageConverter->setOutputDir(MOBILE_IMAGE_REALDIR);
  90.             $imageConverter->setImageType($imageType);
  91.             $imageConverter->setImageWidth($imageWidth);
  92.             $imageConverter->setImageHeight($imageHeight);
  93.             $imageConverter->setFileSize($imageFileSize);
  94.  
  95.             // HTML中のIMGタグを変換後のファイルパスに置換する
  96.             foreach ($images[1] as $key => $path) {
  97.                 $realpath = html_entity_decode($path, ENT_QUOTES);
  98.                 $realpath = preg_replace('|^' . ROOT_URLPATH . '|', HTML_REALDIR, $realpath);
  99.                 $converted = $imageConverter->execute($realpath);
  100.                 if (isset($converted['outputImageName'])) {
  101.                     $buffer = str_replace($path, MOBILE_IMAGE_URLPATH . '/' . $converted['outputImageName'], $buffer);
  102.                 } else {
  103.                     $buffer = str_replace($images[0][$key], '<!--No image-->', $buffer);
  104.                 }
  105.             }
  106.         }
  107.         return $buffer;
  108.     }
  109. }
  110. ?>

Documentation generated on Fri, 24 Feb 2012 14:02:50 +0900 by Seasoft